package xml;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.SortedMap;
import java.util.TreeMap;

import org.jdom.Element;
import org.jdom.JDOMException;

/**
 * XML-Reader zum Auslesen von Rezepten aus XML-Files
 * @author Dennis Oeguetveren
 *
 */
public class XMLSearchReader extends XML {
	/**
	 * Konstruiert Reader-Objekt
	 * @param file	Dateiname
	 * @throws IOException 
	 * @throws JDOMException 
	 */
	public XMLSearchReader(File file) throws JDOMException, IOException {
		super(file);
	}

	/**
	 * Konvertiert den Inhalt einer XML in ein fuer Tabellen lesbares Format
	 * @return	SortedMap (key=Rezeptname, value=Liste mit Kategorie und Bewertung) 
	 * 			mit allen in der XML vorhandenen Kategorien
	 * @throws IOException
	 * @throws JDOMException
	 */
	@SuppressWarnings("unchecked")
	public SortedMap<String,List<String>> convertToTable(String name) throws JDOMException, IOException {
		List<Element>recipes = null;
		SortedMap<String, List<String>>map = new TreeMap<String, List<String>>();
		update();
		recipes = (List<Element>)root.getChildren();
		
		for (Element component : recipes) {
			if(component.getChildText("name").equalsIgnoreCase(name)){
				List<String>str = new ArrayList<String>();
				String catList = "";
				if (!component.getChildText("category1").equalsIgnoreCase("keine"))
					catList += component.getChildText("category1");
				if (!component.getChildText("category2").equalsIgnoreCase("keine"))
					catList += (", "+component.getChildText("category2"));
				if (!component.getChildText("category3").equalsIgnoreCase("keine"))
					catList += (", "+component.getChildText("category3"));
				
				str.add(catList);
				//str.add(component.getChildText("category1"));
				str.add(component.getChildText("rating"));
				str.add(component.getChildText("id"));
	
				map.put(component.getChildText("name").toString(), str);
			}
		}
		System.out.println("sdfsdgf");
		System.out.println(map);
        return map;
	}
	
	/**
	 * Ermittelt die hoechste ID aller in der XML gespeicherten Rezepte
	 * @return	Rezept-ID
	 * @throws IOException 
	 * @throws JDOMException 
	 */
	public int highestID() throws JDOMException, IOException {
		update();
		if(root.getChild("recipe") != null) {
			@SuppressWarnings("unchecked")
			List<Element> liste = (List<Element>)root.getChildren();
			int highest_id = Integer.parseInt(liste.get(liste.size()-1).getChild("id").getText());
			return highest_id;
		}
		return -1;
	}
}
